home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-28 | 2.7 KB | 138 lines | [TEXT/MPS ] |
- // writeFile.c
- //
- // file writing functions for CIncludesCode MPW tool
-
- #include "CIncludesCode.h"
- #include <Memory.h>
- #include <Files.h>
- #include <StdIO.h>
- #include <OSUtils.h>
-
- extern long numFiles;
- extern strArray **filesHdl;
- extern Handle dictionary[numDictionaries];
- extern Handle dependencies;
-
- void writeData(short fileid,long cnt,Ptr p)
- {
- long count = cnt;
- OSErr error;
-
- error = FSWrite(fileid,&count,p);
- if (error)
- {
- errorExit("Write operation failed!");
- } // if error
- } // writeData()
-
- long longAlign(long value)
- {
- long n = (value % 4);
- return (n ? value + 4 - n : value);
- } // longAlign()
-
- void shrinkDictionary(Handle dict)
- {
- long newSize;
-
- newSize = *((long*) *dict); // end pointer
- newSize = longAlign(newSize);
- SetHandleSize(dict,newSize);
- if (MemError())
- {
- errorExit("shrinkDictionary failed");
- } // if MemError()
- } // shrinkDictionary()
-
- void alignHandle(Handle dict)
- {
- long newSize = longAlign(GetHandleSize(dict));
-
- SetHandleSize(dict,newSize);
- if (MemError())
- {
- errorExit("alignHandle failed");
- } // if MemError()
- } // alignHandle()
-
-
- short openIdentifierFile(Str255 filename)
- {
- short fileid = 0;
- OSErr error;
- SysEnvRec world;
-
- SysEnvirons(1,&world);
- error = FSOpen(filename,world.sysVRefNum,&fileid);
- if (error)
- {
- (void) Create(filename,world.sysVRefNum,'????','DATA');
- (void) FSOpen(filename,world.sysVRefNum,&fileid);
- } // if error
- else
- {
- (void) SetEOF(fileid,0L);
- } // else if error
- return fileid;
- } // openIdentifierFile()
-
-
- void makeDataHeader(dataHeaderType *dhPtr)
- {
- short i;
- long p;
-
- dhPtr->numFiles = numFiles;
- p = sizeof(dataHeaderType);
- dhPtr->nameArrayOffset = p;
- p += GetHandleSize((Handle) filesHdl);
- dhPtr->dependencyArrayOffset = p;
- p += GetHandleSize(dependencies);
-
- for (i = 0; i < numDictionaries; ++i)
- {
- dhPtr->dictionaryOffsets[i] = p;
- p += GetHandleSize(dictionary[i]);
- } // for i
- } // makeDataHeader()
-
- void closeFile(short fileid)
- {
- short volRefNum;
-
- (void) GetVRefNum(fileid,&volRefNum);
- (void) FlushVol(0L,volRefNum);
- (void) FSClose(fileid);
- } // closeFile()
-
- void makeDataFile(void)
- {
- short i;
- short fileid;
- dataHeaderType ourHeader;
-
- fprintf(stderr,"\nWriting Datafile to disk...\n");
- fileid = openIdentifierFile(dataFilename);
-
- alignHandle((Handle) filesHdl);
- alignHandle(dependencies);
- for (i = 0; i < numDictionaries; ++i)
- {
- shrinkDictionary(dictionary[i]);
- } // for i
-
- makeDataHeader(&ourHeader);
-
- writeData(fileid,sizeof(dataHeaderType),(Ptr) &ourHeader);
- writeData(fileid,GetHandleSize((Handle) filesHdl),(Ptr) *filesHdl);
- writeData(fileid,GetHandleSize(dependencies),*dependencies);
-
- for (i = 0; i < numDictionaries; ++i)
- {
- writeData(fileid,GetHandleSize(dictionary[i]),*dictionary[i]);
- } // for i
-
- closeFile(fileid);
- } // makeDataFile()
-
- // end of writeFile.c